package com.ming.transaction.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ming.transaction.common.Result;
import com.ming.transaction.common.annotation.RecordLoggerAnnotation;
import com.ming.transaction.entity.Role;
import com.ming.transaction.service.IRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  角色控制器
 * </p>
 *
 * @author 陈仕健
 * @since 2023-05-06
 */
@Api(tags = "角色控制器")
@RestController
@RequestMapping("/role")
public class RoleController {

    @Resource
    private IRoleService roleService;

    /**
     * 管理员手动添加角色
     * @param role
     * @return
     */
    @PostMapping
    @ApiOperation("管理员添加角色")
    @RecordLoggerAnnotation(value = "管理员添加角色")
    public Result save(@RequestBody Role role){
        return roleService.saveRole(role);
    }

    /**
     * 管理员修改角色信息
     * @param role
     * @return
     */
    @PutMapping
    @ApiOperation("管理员修改角色")
    @RecordLoggerAnnotation(value = "管理员修改角色")
    public Result editUser(@RequestBody Role role){
        return roleService.updateRole(role);
    }

    /**
     * 管理员手动删除角色
     * @param id
     * @return
     */
    @DeleteMapping("/{id}")
    @ApiOperation("管理员删除角色")
    @RecordLoggerAnnotation(value = "管理员删除角色")
    public Result delete(@PathVariable Integer id){
        return roleService.deleteById(id);
    }

    /**
     * 查询所有角色
     * @return
     */
    @GetMapping
    @ApiOperation("查询所有角色")
    public Result findAll(){
        return roleService.findRole();
    }

    /**
     * 批量删除角色
     * @param ids
     * @return
     */
    @ApiOperation("批量删除角色")
    @PostMapping("/del/batch")
    @RecordLoggerAnnotation(value = "管理员批量删除角色")
    public Result deletebatch(@RequestBody List<Integer> ids) {
        return roleService.deleteByIds(ids);

    }

    // ======================================角色菜单=============================================

    /**
     * 绑定角色和菜单的关系  先删除角色所绑定的菜单，再创建角色菜单
     * @param roleId  通过前端 scope.row.id 获取角色id
     * @param menusId   通过菜单信息 获取 数组
     * @return
     */
    @ApiOperation("管理员分配角色菜单")
    @PostMapping("/roleMenu/{roleId}")
    @RecordLoggerAnnotation(value = "管理员分配角色菜单")
    public Result roleMenu(@PathVariable Integer roleId,@RequestBody List<Integer> menusId){
        return roleService.roleMenu(roleId,menusId);
    }

    /**
     * 获取当前用户所绑定的菜单
     * @param roleId
     * @return
     */
    @ApiOperation("获取角色菜单")
    @GetMapping("/roleMenu/{roleId}")
    public Result getRoleMenu(@PathVariable Integer roleId){
        return Result.success("获取当前角色菜单!",roleService.getRoleMenu(roleId));
    }
}

